package com.baizhi.overidex;

public class OverideDemo {
    public static void main(String[] args) {
        //创建一个小学生对象
        // 如果子类中重写了父类的方法，则调用的是子类重写后的方法
        //如果子类中没有重写父类的方法，则调用的是父类的方法
        Pupil p = new Pupil();
        p.study();  //调用的是子类重写后的方法

        //创建一个初中生对象
        Junior j = new Junior();
        j.study(); //调用的是子类重写后的方法

//        Senior s = new Senior();
//        s.study(); //没有重写父类的方法，则调用的是父类的方法
    }
}

//学生类
class Student{

    //学习的方法
    public void study(){
        System.out.println("在学习");
    }

//    private void sleep(){
//        System.out.println("睡觉");
//    }
}

//小学生
class Pupil extends Student{
    //如果父子类中，出现了方法签名（方法名+参数列表）相同，方法体不同的非静态方法，这就是方法的重载/覆盖
    @Override  //注解 这个注解专门用于标记这个方法是重写的方法
    public  void study(){
        //super是父类对象的引用，可以看做是一个虚拟的父类对象
        //super的作用，就是在子类中调用父类属性和方法
        super.study();
        System.out.println("小学生学习的内容很简单");
    }

    //不是重写
//    @Override
//    private void sleep(){
//        System.out.println("在睡觉");
//    }

}

//初中生
class Junior extends Student{

    public void study(){
        System.out.println("初中生要学习很多门课程");
    }
}

//高中生
class Senior extends Student{

}

//大学生
class Undergraduate extends  Student{
    @Override
    public void study() {
        System.out.println("大学生比较自由的学习");
    }
}
